import os
import scipy.io
import numpy as np
import matplotlib.pyplot as plt

def view_mat_file(mat_file_path):
    """查看mat文件的内容"""
    if not os.path.exists(mat_file_path):
        print(f"文件不存在: {mat_file_path}")
        return
    
    print(f"正在加载文件: {mat_file_path}")
    try:
        # 加载mat文件
        mat_data = scipy.io.loadmat(mat_file_path)
        
        # 打印文件中的变量名
        print("\n文件包含的变量:")
        for key in mat_data.keys():
            # 跳过scipy.io自动添加的元数据变量（以__开头的变量）
            if not key.startswith('__'):
                value = mat_data[key]
                print(f"- {key}: 类型={type(value)}, 形状={value.shape if hasattr(value, 'shape') else '标量'}")
        
        # 可视化骨骼数据（如果是骨骼数据）
        for key, value in mat_data.items():
            if key.startswith('__'):
                continue
                
            if isinstance(value, np.ndarray) and len(value.shape) >= 2:
                print(f"\n变量 '{key}' 的前5行数据:")
                print(value[:5])
                
                # 如果数据维度合适，尝试可视化
                if len(value.shape) == 2 and value.shape[1] >= 2:
                    try:
                        plt.figure(figsize=(10, 6))
                        plt.title(f"'{key}' 数据可视化")
                        
                        # 如果数据点太多，取样一部分
                        max_points = 100
                        sample_data = value[:max_points] if value.shape[0] > max_points else value
                        
                        # 尝试绘制散点图（假设前两列是坐标）
                        plt.scatter(sample_data[:, 0], sample_data[:, 1], alpha=0.5)
                        plt.xlabel('X坐标')
                        plt.ylabel('Y坐标')
                        plt.show()
                    except Exception as e:
                        print(f"无法可视化数据: {e}")
    
    except Exception as e:
        print(f"加载文件时出错: {e}")

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description="查看mat文件内容的工具")
    parser.add_argument("mat_file", help="要查看的mat文件的路径")
    
    args = parser.parse_args()
    view_mat_file(args.mat_file)
